QT中为PDF添加水印 您所在的位置:网站首页 mupdf 添加图片 QT中为PDF添加水印

QT中为PDF添加水印

2023-08-29 02:05| 来源: 网络整理| 查看: 265

前不久在上一篇博客中演示了如何在QT中创建并编辑PDF文件,参见:https://blog.csdn.net/thequitesunshine007/article/details/109720755

现在在其基础之上,想要增加背景水印。

代码如下:

#include #include #include #include #include #include #include /* *@产生一张w*h大小的透明背景的QPixmap ,上面显示content水映 */ QPixmap CreateWatermarkBg(uint16_t w, uint16_t h, QString content) { QPixmap pm(w,h);//一张新空图 pm.fill(Qt::transparent);//用透明色填充 QPainter painter(&pm); int fontSize = 25/*25*/, spacing = 5; QFont font("Ubuntu", fontSize, QFont::Thin); font.setLetterSpacing(QFont::AbsoluteSpacing, spacing); painter.setFont(font); painter.setPen(QColor(200, 200, 200)); painter.translate(pm.width() / 2, -pm.width() / 2);//调整位置 QFontMetricsF fontMetrics(font); qreal font_w = fontMetrics.width(content); qreal font_h = fontMetrics.height(); qreal ang = 45.0; painter.rotate(ang); int project_Y = pm.width() * sin(ang) + pm.height() * sin(ang);//原图像Y坐标在新坐标系Y轴上的投影长度。 int project_X = pm.height()*sin(ang) + pm.width()*cos(ang);//原图像x坐标在新坐标系x轴上的投影长度。 int x_step = 1.5*font_w + 3*spacing; //在新坐标系X轴上的间距 int y_step = (3*font_h); int rowCnt = project_Y / y_step + 1; //在新坐标系下写多少行 int colCnt = project_X / x_step; //在新坐标系下写多少列 for (int r = 0; r painter.drawText(x_step * c, y_step * r,content); } } return pm; }

下面 CreateWatermarkBg得到的QPixmap画在PDF文件上即可。

//画水印 int w = 100, h = 100; QPixmap watermask = CreateWatermarkBg(w,h, QString(“CSDN博客”)); float imgDisScale = 1.0; painter.drawPixmap(QRect(0, 0, wimgDisScale,himgDisScale), watermask);

画完水印之后,在水印之上再画其他元素即可。反正CreateWatermarkBg得到的是透明背景,而且先画水印,再画其他元素时便会覆盖,等价于水印处于纸张的最底层。(图层最底层)



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有